package com.tg.network.socket.http;

import com.alibaba.fastjson.JSONObject;
import com.appbase.custom.base.AppVersionBean;
import com.appbase.custom.base.AuthCloseBean;
import com.appbase.custom.base.DrivePostion;
import com.appbase.custom.base.UrgencyNoticeBean;
import com.appbase.custom.config.ApiUrl;
import com.tange.core.backend.service.api.CoreApiUrl;
import com.tange.feature.data.structure.DeviceBatteryResp;
import com.tange.feature.data.structure.DeviceLocationResp;
import com.tange.feature.data.structure.DeviceTypeBean;
import com.tg.data.bean.DeviceItem;
import com.tg.data.bean.TGGlobalConfig;
import com.tg.data.http.entity.AIBirdDataBean;
import com.tg.data.http.entity.AIGuardDataBean;
import com.tg.data.http.entity.AdBean;
import com.tg.data.http.entity.AllDriveRecord;
import com.tg.data.http.entity.AppLogToken;
import com.tg.data.http.entity.AssistanceStateBean;
import com.tange.core.data.structure.Response;
import com.tg.data.http.entity.BatteryBean;
import com.tg.data.http.entity.BindHistryBean;
import com.tg.data.http.entity.BirdDataBean;
import com.tg.data.http.entity.CancelShareBean;
import com.tg.data.http.entity.ChangeDeviceNameBean;
import com.tg.data.http.entity.ChangeNotifyBean;
import com.tg.data.http.entity.CountryInfo;
import com.tg.data.http.entity.DeviceBasicListBean;
import com.tg.data.http.entity.DeviceBellBean;
import com.tg.data.http.entity.DeviceBindBean;
import com.tg.data.http.entity.DeviceLocation;
import com.tg.data.http.entity.DeviceModelBean;
import com.tg.data.http.entity.DeviceServiceStatusBean;
import com.tg.data.http.entity.DeviceVersionBean;
import com.tg.data.http.entity.DriveRecord;
import com.tg.data.http.entity.EmptyBean;
import com.tg.data.http.entity.EventData;
import com.tg.data.http.entity.EventMessageBean;
import com.tg.data.http.entity.FeedbackBean;
import com.tg.data.http.entity.FenceBean;
import com.tg.data.http.entity.FenceList;
import com.tg.data.http.entity.GuardDisplayBean;
import com.tg.data.http.entity.LaboratoryListBean;
import com.tg.data.http.entity.LampEventMessageBean;
import com.tg.data.http.entity.LockBellTokenBean;
import com.tg.data.http.entity.LockBellUserBean;
import com.tg.data.http.entity.LoginBean;
import com.tg.data.http.entity.MessageDataBean;
import com.tg.data.http.entity.AlertMessageFilterBean;
import com.tg.data.http.entity.MessageTipDataBean;
import com.tg.data.http.entity.ModifyNickNameBean;
import com.tg.data.http.entity.NotifyConfigBean;
import com.tg.data.http.entity.NotifyDataBean;
import com.tg.data.http.entity.PopWindowBean;
import com.tg.data.http.entity.ServiceInfoBean;
import com.tg.data.http.entity.SetPasswordBean;
import com.tg.data.http.entity.ShareDeviceBean;
import com.tg.data.http.entity.ShareUser;
import com.tg.data.http.entity.ShouldAiFeedbackBean;
import com.tg.data.http.entity.SimilarityBean;
import com.tg.data.http.entity.SimpleStatusBean;
import com.tg.data.http.entity.SmartSpeakerBean;
import com.tg.data.http.entity.TimeZoneBean;
import com.tg.data.http.entity.UploadPicBean;
import com.tg.data.http.entity.UserDeviceListBean;
import com.tg.data.http.entity.UserInfo;
import com.tg.data.http.entity.VerifyCodeBean;
import com.tg.data.http.entity.VersionBean;
import com.tg.data.http.entity.WatchTime;
import com.tg.data.http.entity.WechatInfoBean;
import com.tg.data.http.entity.WorkOrderBean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * 废弃：使用 Http 类，替代，参考 https://tange-ai.feishu.cn/docx/Gz0rdPHPVoKREqxOLKJc7ubznnc
 */
@java.lang.Deprecated
public interface TanGeServiceApi {

    @POST(ApiUrl.APP_GET_DEVICE_TYPE)
    Observable<Response<DeviceTypeBean>> getDeviceType(@Body HashMap<String,String>  map);


    //获取隐私和用户协议
    @POST(ApiUrl.GET_PRIVACY)
    Observable<Response<String>> getPrivacy(@Body HashMap<String,String> map);

    @POST(ApiUrl.GET_USERPROTOCOL)
    Observable<Response<String>> getProtocol(@Body HashMap<String,String> map);

    //登录
    @POST(ApiUrl.USER_LOGIN)
    Observable<Response<LoginBean>> login(@Body HashMap<String,String>  loginMap);

    //验证 分享码
    @POST(ApiUrl.VERIFY_SHARE_CODE)
    Observable<Response<SimpleStatusBean>> verifyShareCode(@Body HashMap<String,String> map);


    //登出
    @POST(ApiUrl.USER_LOGOUT)
    Observable<Response<EmptyBean>> logout(@Body HashMap<String,String>  loginMap);


    //AI是否可反馈
    @POST(ApiUrl.SHOULD_AI_FEEDBACK)
    Observable<Response<EmptyBean>> shouldAiFeedback(@Body HashMap<String,String>  map);

    //AI反馈
    @POST(ApiUrl.POST_AI_FEEDBACK)
    Observable<Response<ShouldAiFeedbackBean>> postAiFeedback(@Body HashMap<String, Object>  map);


    //获取用户设备列表
    @POST(ApiUrl.DEVICE_LIST_DETAIL)
    Observable<Response<UserDeviceListBean>> getUserDeviceListDetail(@Body HashMap<String,String>  map);


    //获取时区列表
    @POST(ApiUrl.DEVICE_TIMEZONE_LIST)
    Observable<Response<ArrayList<TimeZoneBean>>> getTimeZoneList(@Body HashMap<String,String>  map);

    //设置时区
    @POST(ApiUrl.DEVICE_SET_TIMEZONE)
    Observable<Response<String>> setTimeZone(@Body HashMap<String,String>  map);

    //分享设备
    @POST(ApiUrl.DEVICE_SHARE)
    Observable<Response<ShareDeviceBean>> shareDevice(@Body HashMap<String,String>  map);

    //修改设备名称
    @POST(ApiUrl.DEVICE_ALTER)
    Observable<Response<ChangeDeviceNameBean>> changeDeviceName(@Body HashMap<String,String>  map);

    //修改昵称
    @POST(ApiUrl.APP_MODIFYNAME)
    Observable<Response<ModifyNickNameBean>> modifyNickName(@Body HashMap<String,String>  map);

    //索引分类查询
    @POST(ApiUrl.DEVICE_PLAYBACK_RECORD_INFO)
    Observable<Response<EventData>> getRecordEvent(@Body HashMap<String,String>  map);

    //通知设备更新
    @POST(ApiUrl.DEVICE_VERSION_UPDATE)
    Observable<Response<String>> firmwareUpgrade(@Body HashMap<String,String>  map);

    //修改用户配置
    @POST(ApiUrl.NOTIFY_SETTING)
    Observable<Response<ChangeNotifyBean>> changeNotifySetting(@Body JSONObject  map);

    //修改用户配置
    @POST(ApiUrl.APP_ALARM_MSG_SWITCHER)
    Observable<Response<NotifyDataBean>> getAlarmMsgSwitcher(@Body HashMap<String,String>  map);


    //修改用户配置
    @POST(ApiUrl.APP_ALARM_MSG_TIP)
    Observable<Response<MessageTipDataBean>> getAlarmMsgTip(@Body HashMap<String,String>  map);

    //修改用户配置
    @POST(ApiUrl.APP_ALARM_SETUP_TIP)
    Observable<Response<MessageTipDataBean>> getAlarmSetupTip(@Body HashMap<String,String>  map);



    //告警信息筛选查询
    @POST(ApiUrl.DEVICE_MESSAGE_QUERY)
    Observable<Response<MessageDataBean>> getMessageList(@Body JSONObject bean);



    //告警信息筛选查询
    @Deprecated
    @POST(ApiUrl.DEVICE_MESSAGE_FILTER2)
    Observable<Response<List<String>>> getMessageFilter2(@Body HashMap<String,String>  map);

    //告警信息筛选查询
    @POST(ApiUrl.DEVICE_MESSAGE_FILTER2)
    Observable<Response<List<AlertMessageFilterBean>>> getMessageFilter(@Body HashMap<String, String>  map);


    //设备服务查询
    @POST(ApiUrl.DEVICE_SERVICE_QUERY)
    Observable<Response<HashMap<String, DeviceServiceStatusBean>>> getDeviceService(@Body HashMap<String, String>  map);

    //设备位置查询
    @POST(ApiUrl.DEVICE_LOCATION_QUERY)
    Observable<Response<HashMap<String, DeviceLocationResp>>> getDeviceLocation(@Body HashMap<String, String>  map);

    //设备电量查询
    @POST(ApiUrl.DEVICE_BATTERY_QUERY)
    Observable<Response<HashMap<String, DeviceBatteryResp>>> getDeviceBattery(@Body HashMap<String, String>  map);

    //确认人形
    @POST(ApiUrl.MESSAGE_SUBMIT_DISCOVER_FEEDBACK)
    Observable<Response<String>> messageFeedback(@Body HashMap<String,String>  map);

    //分享列表
    @POST(ApiUrl.DEVICE_SHARE_LIST)
    Observable<Response<List<ShareUser>>> getShareList(@Body HashMap<String,String>  map);

    //取消分享设备
    @POST(ApiUrl.DEVICE_SHARE_DELETE)
    Observable<Response<List<CancelShareBean>>> cancelShare(@Body HashMap<String,String>  map);

    //获取设备密码
    @POST(ApiUrl.DEVICE_GET_PASSWORD)
    Observable<Response<DeviceItem>> getDevicePassword(@Body HashMap<String,String>  map);

    //上传异常信息
    @POST(ApiUrl.EXCEPTION_REPORT)
    Observable<Response<String>> uploadExceptionReport(@Body HashMap<String,String>  map);

    //设备警铃
    @POST(ApiUrl.BELL_AUDIO_LIST)
    Observable<Response<List<DeviceBellBean>>>getBellAudioList(@Body HashMap<String,String>  map);

    //帮助信息
    @POST(ApiUrl.FEEDBACK_LIST)
    Observable<Response<Object>> getFeedbackList(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_AUTH_CLOSE)
    Observable<Response<AuthCloseBean>> appAuthClose(@Body HashMap<String,String>  map);


    @POST(ApiUrl.APP_BIND_NEW_USER)
    Observable<Response<LoginBean>> bindNewUser(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_BIND_OLD_USER)
    Observable<Response<LoginBean>> bindOldUser(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_VERIFY_PWD)
    Observable<Response<EmptyBean>> verifyPwd(@Body HashMap<String,String>  map);
    @POST(ApiUrl.DEVICE_MESSAGE_DELETE)
    Observable<Response<String>> deleteMessage(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_CHECK_TOKEN)
    Observable<Response<UserInfo>> checkToken(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_GET_BIND_HISTORY)
    Observable<Response<List<BindHistryBean>>> getBindHistroy(@Body HashMap<String,String>  map);


    @POST(ApiUrl.APP_GET_GLOBAL_CONFIG)
    Observable<Response<TGGlobalConfig>> getGloalConfig(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_GET_QUERY_OWNER)
    Observable<Response<String>> getQueryOwner(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_QUERY_SHARE_IMG)
    Observable<Response<String>> getShareImg(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_WATCH_TIME_REPORT)
    Observable<Response<String>> watchTimeReport(@Body HashMap<String,String>  map);
    @POST(ApiUrl.APP_WATCH_TIME_QUERY)
    Observable<Response<WatchTime>> watchTimeQuery(@Body HashMap<String,String>  map);
    @POST(ApiUrl.APP_GET_AD)
    Observable<Response<AdBean>> getAd(@Body HashMap<String,String>  map);
    @POST(ApiUrl.APP_AD_CLOSE)
    Observable<Response<String>> adClose(@Body HashMap<String,String>  map);

    @POST(ApiUrl.SHARING_APP)
    Observable<Response<EmptyBean>> getShareApp(@Body HashMap<String,String>  map);
    //设置用户时区
    @POST(ApiUrl.USER_SET_TIMEZONE)
    Observable<Response<String>> setUserTimeZone(@Body HashMap<String,String>  map);

    @POST(ApiUrl.APP_SMART_SPEAKERS)
    Observable<Response<List<SmartSpeakerBean>>> smartSpeakers(@Body HashMap<String,String>  map);

    //修改用户配置
    @POST(ApiUrl.APP_AI_GUARD_INFO)
    Observable<Response<AIGuardDataBean>> getAiGuardInfo(@Body HashMap<String,String>  map);

    //修改用户配置
    @POST(ApiUrl.APP_AI_GUARD_UPDATE_INFO)
    Observable<Response<EmptyBean>> updateAiGuardInfo(@Body HashMap<String, Object>  map);

    //修改用户配置
    @POST(ApiUrl.APP_AI_GUARD_DISPLAY)
    Observable<Response<GuardDisplayBean>> getAiGuardDisplay(@Body HashMap<String, String>  map);

    @POST(ApiUrl.APP_STATS_STREAM)
    Observable<Response<EmptyBean>> streamingRecord(@Body HashMap<String,Object>  map);


}
